package ru.spb.nicetu.altx.mnemo.node;

import java.util.List;

import ru.spb.nicetu.altx.mnemo.cell.INodeCell;
import ru.spb.nicetu.altx.mnemo.cell.SettingNodeCell;
import ru.spb.nicetu.altx.mnemo.extpoint.valuetypes.ITemplateValueType;


public abstract class ALoopTaskNode extends CompoundTaskNode implements
    ILoopTaskNode {

  public static String settingsCellID = "0";

  public ALoopTaskNode(String name) {
    super(name);
    addNodeCell(createConditionSettingsCell());
  }

  /**
   * создает настроечную ячейку, в которой будет храниться имя ячейки памяти,
   * содержащей данные для вычисления условия продолжения выполнения цикла
   */
  protected abstract INodeCell createConditionSettingsCell();

  @Override
  public boolean isGoodValueSourceCondition() {
    if (! super.isGoodValueSourceCondition() )
      return false;
    
    List<INodeCell> settingsCells = getAllSettingCells();
    if (settingsCells.size() < 1)
      return false;
    
    for (INodeCell cell: settingsCells){
      if (settingsCellID.equals(cell.getCellID())){
        ITemplateValueType value = ((SettingNodeCell)cell).getValue();
        if (value != null){
          if (value.get() != null)
            return true;
          else
            return false;
        } else
          return true;
      }
    }
    return false;
  }
  
  public void runIteration() {
  }
}
